package com.example.test.advice.第三章_类_对象_方法.建议33_不要覆写静态方法;

/**
 * 在子类中构建与父类相同的方法名、输入参数、输出参数、访问权限（权限可以扩大），
 * 并且父类、子类都是静态方法，此种行为叫做隐藏（Hide），它与覆写有两点不同
 * 1、表现形式不同。隐藏用于静态方法，覆写用于非静态方法。在代码上的表现是：@Override注解可以用于覆写，不能用于隐藏
 * 2、职责不同。隐藏的目的的为了抛弃父类静态方法，重现子类方法，例如我的的例子，Sub.doSomething的出现是为了遮盖父类
 * 的Base.doSomething方法，也是期望父类的静态方法不要破坏子类的业务行为；而覆写则是将父类的行为增强或减弱，延续父类、
 * 的职责
 */
public class OverrideDemo {

    public static void main(String[] args) {
        Base base = new Sub();
        //调用非静态方法
        base.doAnything();
        //调用静态方法
        base.doSomething();
    }
}


class Base {
    //父类静态方法
    public static void doSomething(){
        System.out.println("我是父类静态方法");
    }

    //父类非静态方法
    public void doAnything(){
        System.out.println("我是父类非静态方法");
    }
}

class Sub extends Base{

    //子类同名、同参数的静态方法
    public static void doSomething(){
        System.out.println("我是子类静态方法");
    }

    @Override
    public void doAnything() {
        System.out.println("我是子类非静态方法");
    }
}